//自定义异常类
/**
 * Java 中虽然已经内置了丰富的异常类, 但是我们实际场景中可能还有一些情况需要我们对异常类进行扩展, 创建符合我
 * 们实际情况的异常.
 */

/**
 * 自定义异常：
 * 1、一定要继承某一个异常（一般是Exception或者RuntimeException）
 * 2、如果要传参数、需要在子类帮助父类，提供父类的构造方法
 * 3、继承Exception默认是编译时异常、
 *   继承RuntimeException默认运行时异常
 *
 * 注意:受查异常如果不用try catch去捕获的话，则一定要在方法名字后面去声明他
 * 不然会报错
 */
//自定义异常类继承Exception则默认为受查异常->运行时异常,继承RuntimeException默认非受查异常->运行时异常
class UserException extends Exception{
    public UserException(String message){
        super(message);
    }
}

class  PasswordException extends Exception{
    public PasswordException(String message){
        super(message);
    }
}

//默认非受查异常->运行时异常
class MyException extends RuntimeException{
    public MyException(){

    }
    public MyException(String str){
        super(str);
        System.out.println(str);
    }
}
//默认受查异常->编译时异常
class MyException2 extends Exception{

}

public class TestDemo4 {

    public static void main1(String[] args) {
        int a = 10;
        if(a == 10){
            throw new MyException("adsf");//如果想传参数,则需要给该类提供一个构造方法
        }
    }
//    例:实现一个用户登录功能
    private static String userName = "admin";
    private static String password = "123456";

    public static void login(String userName, String password) throws UserException,
            PasswordException {//声明异常
//        受查异常如果不够try catch去捕获的话，则一定要像上面那样去声明他
        if (!TestDemo4.userName.equals(userName)) {
            throw new UserException("用户名错误");
        }
        if (!TestDemo4.password.equals(password)) {
            throw new PasswordException("密码错误");
        }
        System.out.println("登陆成功");
    }
    public static void main(String[] args) {

        try {
            login("admin", "123456");
        } catch (UserException userError) {
            userError.printStackTrace();
        } catch (PasswordException passwordError) {
            passwordError.printStackTrace();
        }
    }

//      实现一个用户登录功能（未用到自定义异常）
    /*
       private static String userName = "admin";
        private static String password = "123456";

        public static void main1(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String Name = scanner.nextLine();
            String password2 = scanner.nextLine();
            login(Name,password2);
        }
        public static void login(String userName, String password) {
            if (!Test3.userName.equals(userName)) {
                // TODO 处理用户名错误
                System.out.println("");
                System.out.println("用户名错误");
                return;
            }
            if (!Test3.password.equals(password)) {
                // TODO 处理密码错误
                System.out.println("密码错误");
                return;
            }
            System.out.println("登陆成功");
        }
*/
}
